package fifth.构造方法私有化;
/*
因为“封装构造方法之后如何。。。”这个类中的instance属性在类中一般都是要封装的
而封装之后必须通过方法获得 但是instance是静态属性 所以此处必须声明静态方法
这样就可以被类名称直接调用
 */
public class 声明静态方法取得类实例 {
    public static void main(String[] args) {
        //访问类中的静态方法 取得对象实例
       Demo d1 =Demo.getDemo();
       Demo d2 =Demo.getDemo();
       Demo d3 =Demo.getDemo();
        d1.print();
        d2.print();
        d3.print();
    }
}
class Demo{
    private static Demo demo = new Demo();
    public static Demo getDemo(){   //注意是public
        return demo;    //通过静态方法获取类的实例
    }
    public void print(){
        System.out.println("hello java!");
    }
}
/**
 * 以上程序中：
 * 虽然声明了三个对象 但是所有的对象都是只使用了一个demo引用
 *      栈内存         堆内存
 *      d1          实例化对象（demo d1 d2 d3都只是指向这一个对象）
 *      d2
 *      d3
 *      无论外面如何使用 最终结果只是有一个实例化对象的存在
 *      在设计模式中 这样的设计模式叫“单例设计模式”
 *
 * 单态的应用：
 * windows电脑上 除了桌面上有一个回收站 每个硬盘都有一个回收站
 * 但实际上 每个硬盘的回收站和桌面上的回收站都是同一个
 * 也就是说 正在整个操作系统上 只有一个回收站实例 各个地方都只是引用此实例
 *
 * 记住:只要把构造方法私有化了 就控制了实例化对象的产生 在讲解类库的时候会出现单例模式在Java应用
 */